// #include "sleep.h"

// #define LIGHT_TAG "LightSleep"
// #define DEEP_TAG "DeepSleep"
// #define LIGHT_SLEEP_TIME_US (5 * 1000 * 1000)  // 轻度睡眠唤醒时间5秒
// #define DEEP_SLEEP_TIME_SEC (20)  // 深度睡眠唤醒时间20秒
// #define MAX_SIZE 5
// #define LIGHT_SLEEP_CYCLES 5  // 5次轻度睡眠后进入深度睡眠

// float Temp_Array[MAX_SIZE] = {0};
// float Humi_Array[MAX_SIZE] = {0};
// float avg_temp = 0, avg_humi = 0;  // 平均数
// float MaxTemp = 0, MinTemp = 0, MaxHumi = 0, MinHumi = 0;  // 最大最小温湿度

// static SemaphoreHandle_t light_sleep_connect_sem = NULL;
// static int light_sleep_count = 0;  // 记录轻度睡眠次数

// static void light_sleep_task(void *args)
// {
//     ESP_LOGI(LIGHT_TAG, "WAKE UP FROM LIGHT SLEEP NOW REBOOTING");

//     int i = 0;
//     float temp = 0, humi = 0;

//     while (1) {
//         // 采集数据
//         temp = SHT40_readTemp();
//         humi = SHT40_readHumi();
//         vTaskDelay(10 / portTICK_PERIOD_MS);  // 短暂延时

//         // 保存数据
//         Temp_Array[i] = temp;
//         Humi_Array[i] = humi;
//         MaxTemp = Temp_Array[0];
//         MaxHumi = Humi_Array[0];
//         MinTemp = Temp_Array[0];
//         MinHumi = Humi_Array[0];

//         avg_temp += Temp_Array[i];
//         avg_humi += Humi_Array[i];

//         // 计算最大最小值
//         if (MaxTemp < Temp_Array[i]) MaxTemp = Temp_Array[i];
//         if (MaxHumi < Humi_Array[i]) MaxHumi = Humi_Array[i];
//         if (MinTemp > Temp_Array[i]) MinTemp = Temp_Array[i];
//         if (MinHumi > Humi_Array[i]) MinHumi = Humi_Array[i];

//         i++;
//         if (i == MAX_SIZE - 1) {
//             avg_humi /= MAX_SIZE;
//             avg_temp /= MAX_SIZE;

//             ESP_LOGI(LIGHT_TAG, "Avg Temp: %.2f, Avg Humi: %.2f, Max Temp: %.2f, Max Humi: %.2f, Min Temp: %.2f, Min Humi: %.2f", avg_temp, avg_humi, MaxTemp, MaxHumi, MinTemp, MinHumi);

//             // 等待信号量，保证MQTT连接后上报数据
//             xSemaphoreTake(light_sleep_connect_sem, portMAX_DELAY);  // 等待连接成功
//             SendToAliot(avg_temp, avg_humi, MaxTemp, MinTemp, MaxHumi, MinHumi, Temp_Array[i], Humi_Array[i]);

//             // 清空数据数组
//             for (int j = 0; j < MAX_SIZE; j++) {
//                 Temp_Array[j] = 0;
//                 Humi_Array[j] = 0;
//             }

//             i = 0;
//             avg_humi = avg_temp = 0;  // 重置平均值

//             // 轻度睡眠计数器增加
//             light_sleep_count++;

//             if (light_sleep_count >= LIGHT_SLEEP_CYCLES) {
//                 // 达到5次后进入深度睡眠
//                 deep_sleep_count = 0;
//                 deep_sleep();  // 进入深度睡眠
//                 break;  // 退出循环
//             }
//         }

//         // 进入轻度睡眠
//         ESP_LOGI(LIGHT_TAG, "Entering light sleep for 5 seconds...");
//         esp_sleep_enable_timer_wakeup(LIGHT_SLEEP_TIME_US);
//         esp_light_sleep_start();  // 进入轻度睡眠
//     }
// }

// void light_sleep(void)
// {
//     xTaskCreate(light_sleep_task, "light_sleep_task", 4096, NULL, 6, NULL);
// }

// static void deep_sleep_task(void *args)
// {
//     Deep_Sleep_WakeUp();  // 深度睡眠唤醒后的回调函数
//     ESP_LOGI(DEEP_TAG, "Entering deep sleep now...");
//     ESP_ERROR_CHECK(esp_sleep_enable_timer_wakeup(DEEP_SLEEP_TIME_SEC * 1000 * 1000));  // 设定深度睡眠时间（20秒）
//     esp_deep_sleep_start();  // 进入深度睡眠
// }

// void Deep_Sleep_WakeUp()
// {
//     ESP_LOGI(DEEP_TAG, "Waking up from deep sleep...");
//     bool is_first_boot = false;
//     esp_err_t err = read_first_wifi_boot_flag(&is_first_boot);
//     ESP_LOGI(DEEP_TAG, "First boot flag: %d", is_first_boot);
//     if (err != ESP_OK) {
//         ESP_LOGE(DEEP_TAG, "Error reading first boot flag from NVS");
//         return;
//     }

//     wifi_smart_normal_config(is_first_boot);
//     aliot_start();
//     SHT40_init();

//     // 进入轻度睡眠前释放信号量
//     SemaphoreHandle_t sem = get_light_sleep_connect_sem();
//     if (sem != NULL) xSemaphoreGive(sem);
// }

// void deep_sleep(void)
// {
//     xTaskCreate(deep_sleep_task, "deep_sleep_task", 4096, NULL, 6, NULL);
// }

// void SendToAliot(float avg_temp, float avg_humi, float MaxTemp, float MinTemp, float MaxHumi, float MinHumi, float latest_temp, float latest_humi)
// {
//     if (is_connected_mqtt()) {
//         aliot_post_property_float("current_temperature_max", MaxTemp);
//         aliot_post_property_float("current_temperature_min", MinTemp);
//         aliot_post_property_float("current_humidity_max", MaxHumi);
//         aliot_post_property_float("current_humidity_min", MinHumi);
//         aliot_post_property_float("current_temperature_avg", avg_temp);
//         aliot_post_property_float("current_humidity_avg", avg_humi);
//         aliot_post_property_float("latest_temperature", latest_temp);
//         aliot_post_property_float("latest_humidity", latest_humi);
//         ESP_LOGI(LIGHT_TAG, "Send Data to Aliot Success");
//     }
//     else {
//         ESP_LOGE(LIGHT_TAG, "ERROR: MQTT NOT CONNECTED");
//     }
// }

// #include "sleep.h"

// #define LIGHT_TAG "LightSleep"
// #define DEEP_TAG "DeepSleep"
// #define LIGHT_SLEEP_TIME_US (5 * 1000 * 1000)  // 轻度睡眠唤醒时间5秒
// #define DEEP_SLEEP_TIME_SEC (20)  // 深度睡眠唤醒时间20秒
// #define MAX_SIZE 5
// #define LIGHT_SLEEP_CYCLES 5  // 5次轻度睡眠后进入深度睡眠

// float Temp_Array[MAX_SIZE] = {0};
// float Humi_Array[MAX_SIZE] = {0};
// float avg_temp = 0, avg_humi = 0;  // 平均数
// float MaxTemp = 0, MinTemp = 0, MaxHumi = 0, MinHumi = 0;  // 最大最小温湿度

// static SemaphoreHandle_t light_sleep_connect_sem = NULL;
// static int light_sleep_count = 0;  // 记录轻度睡眠次数

// static void light_sleep_task(void *args)
// {
//     ESP_LOGI(LIGHT_TAG, "WAKE UP FROM LIGHT SLEEP NOW REBOOTING");

//     int i = 0;
//     float temp = 0, humi = 0;

//     while (1) {
//         // 采集数据
//         temp = SHT40_readTemp();
//         humi = SHT40_readHumi();
//         vTaskDelay(10 / portTICK_PERIOD_MS);  // 短暂延时

//         // 保存数据
//         Temp_Array[i] = temp;
//         Humi_Array[i] = humi;
//         MaxTemp = Temp_Array[0];
//         MaxHumi = Humi_Array[0];
//         MinTemp = Temp_Array[0];
//         MinHumi = Humi_Array[0];

//         avg_temp += Temp_Array[i];
//         avg_humi += Humi_Array[i];

//         // 计算最大最小值
//         if (MaxTemp < Temp_Array[i]) MaxTemp = Temp_Array[i];
//         if (MaxHumi < Humi_Array[i]) MaxHumi = Humi_Array[i];
//         if (MinTemp > Temp_Array[i]) MinTemp = Temp_Array[i];
//         if (MinHumi > Humi_Array[i]) MinHumi = Humi_Array[i];

//         i++;
//         if (i == MAX_SIZE - 1) {
//             avg_humi /= MAX_SIZE;
//             avg_temp /= MAX_SIZE;

//             ESP_LOGI(LIGHT_TAG, "Avg Temp: %.2f, Avg Humi: %.2f, Max Temp: %.2f, Max Humi: %.2f, Min Temp: %.2f, Min Humi: %.2f", avg_temp, avg_humi, MaxTemp, MaxHumi, MinTemp, MinHumi);

//             // 等待信号量，保证MQTT连接后上报数据
//             xSemaphoreTake(light_sleep_connect_sem, portMAX_DELAY);  // 等待连接成功
//             SendToAliot(avg_temp, avg_humi, MaxTemp, MinTemp, MaxHumi, MinHumi, Temp_Array[i], Humi_Array[i]);

//             // 清空数据数组
//             for (int j = 0; j < MAX_SIZE; j++) {
//                 Temp_Array[j] = 0;
//                 Humi_Array[j] = 0;
//             }

//             i = 0;
//             avg_humi = avg_temp = 0;  // 重置平均值

//             // 轻度睡眠计数器增加
//             light_sleep_count++;

//             if (light_sleep_count >= LIGHT_SLEEP_CYCLES) {
//                 // 达到5次后进入深度睡眠
//                 deep_sleep_count = 0;
//                 deep_sleep();  // 进入深度睡眠
//                 break;  // 退出循环
//             }
//         }

//         // 进入轻度睡眠
//         ESP_LOGI(LIGHT_TAG, "Entering light sleep for 5 seconds...");
//         esp_sleep_enable_timer_wakeup(LIGHT_SLEEP_TIME_US);
//         esp_light_sleep_start();  // 进入轻度睡眠
//     }
// }

// void light_sleep(void)
// {
//     xTaskCreate(light_sleep_task, "light_sleep_task", 4096, NULL, 6, NULL);
// }

// static void deep_sleep_task(void *args)
// {
//     Deep_Sleep_WakeUp();  // 深度睡眠唤醒后的回调函数
//     ESP_LOGI(DEEP_TAG, "Entering deep sleep now...");
//     ESP_ERROR_CHECK(esp_sleep_enable_timer_wakeup(DEEP_SLEEP_TIME_SEC * 1000 * 1000));  // 设定深度睡眠时间（20秒）
//     esp_deep_sleep_start();  // 进入深度睡眠
// }

// void Deep_Sleep_WakeUp()
// {
//     ESP_LOGI(DEEP_TAG, "Waking up from deep sleep...");
//     bool is_first_boot = false;
//     esp_err_t err = read_first_wifi_boot_flag(&is_first_boot);
//     ESP_LOGI(DEEP_TAG, "First boot flag: %d", is_first_boot);
//     if (err != ESP_OK) {
//         ESP_LOGE(DEEP_TAG, "Error reading first boot flag from NVS");
//         return;
//     }

//     wifi_smart_normal_config(is_first_boot);
//     aliot_start();
//     SHT40_init();

//     // 进入轻度睡眠前释放信号量
//     SemaphoreHandle_t sem = get_light_sleep_connect_sem();
//     if (sem != NULL) xSemaphoreGive(sem);
// }

// void deep_sleep(void)
// {
//     xTaskCreate(deep_sleep_task, "deep_sleep_task", 4096, NULL, 6, NULL);
// }

// void SendToAliot(float avg_temp, float avg_humi, float MaxTemp, float MinTemp, float MaxHumi, float MinHumi, float latest_temp, float latest_humi)
// {
//     if (is_connected_mqtt()) {
//         aliot_post_property_float("current_temperature_max", MaxTemp);
//         aliot_post_property_float("current_temperature_min", MinTemp);
//         aliot_post_property_float("current_humidity_max", MaxHumi);
//         aliot_post_property_float("current_humidity_min", MinHumi);
//         aliot_post_property_float("current_temperature_avg", avg_temp);
//         aliot_post_property_float("current_humidity_avg", avg_humi);
//         aliot_post_property_float("latest_temperature", latest_temp);
//         aliot_post_property_float("latest_humidity", latest_humi);
//         ESP_LOGI(LIGHT_TAG, "Send Data to Aliot Success");
//     }
//     else {
//         ESP_LOGE(LIGHT_TAG, "ERROR: MQTT NOT CONNECTED");
//     }
// }
